/*
 * Copyright 2014 Щекотова Ангелина Александровна.
 * Этот файл — часть J4JClientServer Framework
 * J4JClientServer Framework - свободная программа: вы можете перераспространять ее и/или изменять
 * ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде, в каком
 * она была опубликована Фондом свободного программного обеспечения; либо
 * версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
 *
 * J4JClientServer Framework распространяется в надежде, что она будет полезной,
 * но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
 * или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
 * общественной лицензии GNU.
 *
 * Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
 * вместе с этой программой. Если это не так, см.
 * <http://www.gnu.org/licenses/>.
 */

package ru.java4java.ClientServerFramework.interfaces;

import ru.java4java.ClientServerFramework.SocketHandler;

import java.util.Collection;

public abstract class SocketHandlerListenerAdapter implements SocketHandlerListener {

    @Override
    public void beforeGet(SocketHandler socketHandler) {

    }

    @Override
    public void afterGet(SocketHandler socketHandler) {

    }

    @Override
    public void beforeSend(SocketHandler socketHandler) {

    }

    @Override
    public void afterSend(SocketHandler socketHandler) {

    }

    @Override
    public void beforeStart(SocketHandler socketHandler) {

    }

    @Override
    public void beforeShutdown(SocketHandler socketHandler) {

    }

    @Override
    public void afterShutdown(SocketHandler socketHandler) {

    }

    public static enum OperationType {
        BEFORE_GET,
        AFTER_GET,
        BEFORE_SEND,
        AFTER_SEND,
        BEFORE_START,
        BEFORE_SHUTDOWN,
        AFTER_SHUTDOWN
    }

    public static void runListeners(SocketHandler handler, Collection<SocketHandlerListener> listeners, OperationType operation) {
        for (SocketHandlerListener listener: listeners) {
            switch (operation) {
                case BEFORE_GET:      listener.beforeGet(handler);      break;
                case AFTER_GET:       listener.afterGet(handler);       break;
                case BEFORE_SEND:     listener.beforeSend(handler);     break;
                case AFTER_SEND:      listener.afterSend(handler);      break;
                case BEFORE_START:    listener.beforeStart(handler);    break;
                case BEFORE_SHUTDOWN: listener.beforeShutdown(handler); break;
                case AFTER_SHUTDOWN:  listener.afterShutdown(handler);  break;
                default: throw new IllegalArgumentException("(3th argument)Undefined Operation Type: " + operation.name());
            }
        }
    }

}
